home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Gamer UK 120 / CD Gamer Issue 120 (March 2003) (Disc 2).ISO / mods / Q2_Codered / codeRED1_0.exe / Data1.cab / q_shared.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-12-24  |  34.9 KB  |  1,201 lines

  1. /*
  2. Copyright (C) 1997-2001 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20.     
  21. // q_shared.h -- included first by ALL program modules
  22.  
  23. #ifdef _WIN32
  24. // unknown pragmas are SUPPOSED to be ignored, but....
  25. #pragma warning(disable : 4244)     // MIPS
  26. #pragma warning(disable : 4136)     // X86
  27. #pragma warning(disable : 4051)     // ALPHA
  28.  
  29. #pragma warning(disable : 4018)     // signed/unsigned mismatch
  30. #pragma warning(disable : 4305)        // truncation from const double to float
  31.  
  32. #endif
  33.  
  34. #include <assert.h>
  35. #include <math.h>
  36. #include <stdio.h>
  37. #include <stdarg.h>
  38. #include <string.h>
  39. #include <stdlib.h>
  40. #include <time.h>
  41.  
  42. #if (defined _M_IX86 || defined __i386__) && !defined C_ONLY && !defined __sun__
  43. #define id386    1
  44. #else
  45. #define id386    0
  46. #endif
  47.  
  48. #if defined _M_ALPHA && !defined C_ONLY
  49. #define idaxp    1
  50. #else
  51. #define idaxp    0
  52. #endif
  53.  
  54. typedef unsigned char         byte;
  55. typedef enum {false, true}    qboolean;
  56.  
  57.  
  58. #ifndef NULL
  59. #define NULL ((void *)0)
  60. #endif
  61.  
  62.  
  63. // angle indexes
  64. #define    PITCH                0        // up / down
  65. #define    YAW                    1        // left / right
  66. #define    ROLL                2        // fall over
  67.  
  68. #define    MAX_STRING_CHARS    1024    // max length of a string passed to Cmd_TokenizeString
  69. #define    MAX_STRING_TOKENS    80        // max tokens resulting from Cmd_TokenizeString
  70. #define    MAX_TOKEN_CHARS        128        // max length of an individual token
  71.  
  72. #define    MAX_QPATH            64        // max length of a quake game pathname
  73. #define    MAX_OSPATH            128        // max length of a filesystem pathname
  74.  
  75. //
  76. // per-level limits
  77. //
  78. #define    MAX_CLIENTS            256        // absolute limit
  79. #define    MAX_EDICTS            1024    // must change protocol to increase more
  80. #define    MAX_LIGHTSTYLES        256
  81. #define    MAX_MODELS            256        // these are sent over the net as bytes
  82. #define    MAX_SOUNDS            256        // so they cannot be blindly increased
  83. #define    MAX_IMAGES            256
  84. #define    MAX_ITEMS            256
  85. #define MAX_GENERAL            (MAX_CLIENTS*2)    // general config strings
  86.  
  87.  
  88. // game print flags
  89. #define    PRINT_LOW            0        // pickup messages
  90. #define    PRINT_MEDIUM        1        // death messages
  91. #define    PRINT_HIGH            2        // critical messages
  92. #define    PRINT_CHAT            3        // chat messages
  93.  
  94.  
  95.  
  96. #define    ERR_FATAL            0        // exit the entire game with a popup window
  97. #define    ERR_DROP            1        // print to console and disconnect from game
  98. #define    ERR_DISCONNECT        2        // don't kill server
  99.  
  100. #define    PRINT_ALL            0
  101. #define PRINT_DEVELOPER        1        // only print when "developer 1"
  102. #define PRINT_ALERT            2        
  103.  
  104.  
  105. // destination class for gi.multicast()
  106. typedef enum
  107. {
  108. MULTICAST_ALL,
  109. MULTICAST_PHS,
  110. MULTICAST_PVS,
  111. MULTICAST_ALL_R,
  112. MULTICAST_PHS_R,
  113. MULTICAST_PVS_R
  114. } multicast_t;
  115.  
  116.  
  117. /*
  118. ==============================================================
  119.  
  120. MATHLIB
  121.  
  122. ==============================================================
  123. */
  124.  
  125. typedef float vec_t;
  126. typedef vec_t vec3_t[3];
  127. typedef vec_t vec5_t[5];
  128.  
  129. typedef    int    fixed4_t;
  130. typedef    int    fixed8_t;
  131. typedef    int    fixed16_t;
  132.  
  133. #ifndef M_PI
  134. #define M_PI        3.14159265358979323846    // matches value in gcc v2 math.h
  135. #endif
  136.  
  137. struct cplane_s;
  138.  
  139. extern vec3_t vec3_origin;
  140.  
  141. #define    nanmask (255<<23)
  142.  
  143. #define    IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask)
  144.  
  145. // microsoft's fabs seems to be ungodly slow...
  146. //float Q_fabs (float f);
  147. //#define    fabs(f) Q_fabs(f)
  148. #if !defined C_ONLY && !defined __linux__ && !defined __sgi
  149. extern long Q_ftol( float f );
  150. #else
  151. #define Q_ftol( f ) ( long ) (f)
  152. #endif
  153.  
  154. #define DotProduct(x,y)            (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
  155. #define VectorSubtract(a,b,c)    (c[0]=a[0]-b[0],c[1]=a[1]-b[1],c[2]=a[2]-b[2])
  156. #define VectorAdd(a,b,c)        (c[0]=a[0]+b[0],c[1]=a[1]+b[1],c[2]=a[2]+b[2])
  157. #define VectorCopy(a,b)            (b[0]=a[0],b[1]=a[1],b[2]=a[2])
  158. #define VectorClear(a)            (a[0]=a[1]=a[2]=0)
  159. #define VectorNegate(a,b)        (b[0]=-a[0],b[1]=-a[1],b[2]=-a[2])
  160. #define VectorSet(v, x, y, z)    (v[0]=(x), v[1]=(y), v[2]=(z))
  161.  
  162. void VectorMA (vec3_t veca, float scale, vec3_t vecb, vec3_t vecc);
  163.  
  164. // just in case you do't want to use the macros
  165. vec_t _DotProduct (vec3_t v1, vec3_t v2);
  166. void _VectorSubtract (vec3_t veca, vec3_t vecb, vec3_t out);
  167. void _VectorAdd (vec3_t veca, vec3_t vecb, vec3_t out);
  168. void _VectorCopy (vec3_t in, vec3_t out);
  169.  
  170. void ClearBounds (vec3_t mins, vec3_t maxs);
  171. void AddPointToBounds (vec3_t v, vec3_t mins, vec3_t maxs);
  172. int VectorCompare (vec3_t v1, vec3_t v2);
  173. vec_t VectorLength (vec3_t v);
  174. void CrossProduct (vec3_t v1, vec3_t v2, vec3_t cross);
  175. vec_t VectorNormalize (vec3_t v);        // returns vector length
  176. vec_t VectorNormalize2 (vec3_t v, vec3_t out);
  177. void VectorInverse (vec3_t v);
  178. void VectorScale (vec3_t in, vec_t scale, vec3_t out);
  179. int Q_log2(int val);
  180.  
  181. void R_ConcatRotations (float in1[3][3], float in2[3][3], float out[3][3]);
  182. void R_ConcatTransforms (float in1[3][4], float in2[3][4], float out[3][4]);
  183.  
  184. void AngleVectors (vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
  185. int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *plane);
  186. float    anglemod(float a);
  187. float LerpAngle (float a1, float a2, float frac);
  188.  
  189. #define BOX_ON_PLANE_SIDE(emins, emaxs, p)    \
  190.     (((p)->type < 3)?                        \
  191.     (                                        \
  192.         ((p)->dist <= (emins)[(p)->type])?    \
  193.             1                                \
  194.         :                                    \
  195.         (                                    \
  196.             ((p)->dist >= (emaxs)[(p)->type])?\
  197.                 2                            \
  198.             :                                \
  199.                 3                            \
  200.         )                                    \
  201.     )                                        \
  202.     :                                        \
  203.         BoxOnPlaneSide( (emins), (emaxs), (p)))
  204.  
  205. void ProjectPointOnPlane( vec3_t dst, const vec3_t p, const vec3_t normal );
  206. void PerpendicularVector( vec3_t dst, const vec3_t src );
  207. void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point, float degrees );
  208.  
  209.  
  210. //=============================================
  211.  
  212. char *COM_SkipPath (char *pathname);
  213. void COM_StripExtension (char *in, char *out);
  214. void COM_FileBase (char *in, char *out);
  215. void COM_FilePath (char *in, char *out);
  216. void COM_DefaultExtension (char *path, char *extension);
  217.  
  218. char *COM_Parse (char **data_p);
  219. // data is an in/out parm, returns a parsed out token
  220.  
  221. void Com_sprintf (char *dest, int size, char *fmt, ...);
  222.  
  223. void Com_PageInMemory (byte *buffer, int size);
  224.  
  225. //=============================================
  226.  
  227. // portable case insensitive compare
  228. int Q_stricmp (char *s1, char *s2);
  229. int Q_strcasecmp (char *s1, char *s2);
  230. int Q_strncasecmp (char *s1, char *s2, int n);
  231.  
  232. //=============================================
  233.  
  234. short    BigShort(short l);
  235. short    LittleShort(short l);
  236. int        BigLong (int l);
  237. int        LittleLong (int l);
  238. float    BigFloat (float l);
  239. float    LittleFloat (float l);
  240.  
  241. void    Swap_Init (void);
  242. char    *va(char *format, ...);
  243.  
  244. //=============================================
  245.  
  246. //
  247. // key / value info strings
  248. //
  249. #define    MAX_INFO_KEY        64
  250. #define    MAX_INFO_VALUE        64
  251. #define    MAX_INFO_STRING        512
  252.  
  253. char *Info_ValueForKey (char *s, char *key);
  254. void Info_RemoveKey (char *s, char *key);
  255. void Info_SetValueForKey (char *s, char *key, char *value);
  256. qboolean Info_Validate (char *s);
  257.  
  258. /*
  259. ==============================================================
  260.  
  261. SYSTEM SPECIFIC
  262.  
  263. ==============================================================
  264. */
  265.  
  266. extern    int    curtime;        // time returned by last Sys_Milliseconds
  267.  
  268. int        Sys_Milliseconds (void);
  269. void    Sys_Mkdir (char *path);
  270.  
  271. // large block stack allocation routines
  272. void    *Hunk_Begin (int maxsize);
  273. void    *Hunk_Alloc (int size);
  274. void    Hunk_Free (void *buf);
  275. int        Hunk_End (void);
  276.  
  277. // directory searching
  278. #define SFF_ARCH    0x01
  279. #define SFF_HIDDEN  0x02
  280. #define SFF_RDONLY  0x04
  281. #define SFF_SUBDIR  0x08
  282. #define SFF_SYSTEM  0x10
  283.  
  284. /*
  285. ** pass in an attribute mask of things you wish to REJECT
  286. */
  287. char    *Sys_FindFirst (char *path, unsigned musthave, unsigned canthave );
  288. char    *Sys_FindNext ( unsigned musthave, unsigned canthave );
  289. void    Sys_FindClose (void);
  290.  
  291.  
  292. // this is only here so the functions in q_shared.c and q_shwin.c can link
  293. void Sys_Error (char *error, ...);
  294. void Com_Printf (char *msg, ...);
  295.  
  296.  
  297. /*
  298. ==========================================================
  299.  
  300. CVARS (console variables)
  301.  
  302. ==========================================================
  303. */
  304.  
  305. #ifndef CVAR
  306. #define    CVAR
  307.  
  308. #define    CVAR_ARCHIVE    1    // set to cause it to be saved to vars.rc
  309. #define    CVAR_USERINFO    2    // added to userinfo  when changed
  310. #define    CVAR_SERVERINFO    4    // added to serverinfo when changed
  311. #define    CVAR_NOSET        8    // don't allow change from console at all,
  312.                             // but can be set from the command line
  313. #define    CVAR_LATCH        16    // save changes until server restart
  314.  
  315. // nothing outside the Cvar_*() functions should modify these fields!
  316. typedef struct cvar_s
  317. {
  318.     char        *name;
  319.     char        *string;
  320.     char        *latched_string;    // for CVAR_LATCH vars
  321.     int            flags;
  322.     qboolean    modified;    // set each time the cvar is changed
  323.     float        value;
  324.     struct cvar_s *next;
  325. } cvar_t;
  326.  
  327. #endif        // CVAR
  328.  
  329. /*
  330. ==============================================================
  331.  
  332. COLLISION DETECTION
  333.  
  334. ==============================================================
  335. */
  336.  
  337. // lower bits are stronger, and will eat weaker brushes completely
  338. #define    CONTENTS_SOLID            1        // an eye is never valid in a solid
  339. #define    CONTENTS_WINDOW            2        // translucent, but not watery
  340. #define    CONTENTS_AUX            4
  341. #define    CONTENTS_LAVA            8
  342. #define    CONTENTS_SLIME            16
  343. #define    CONTENTS_WATER            32
  344. #define    CONTENTS_MIST            64
  345. #define    LAST_VISIBLE_CONTENTS    64
  346.  
  347. // remaining contents are non-visible, and don't eat brushes
  348.  
  349. #define    CONTENTS_AREAPORTAL        0x8000
  350.  
  351. #define    CONTENTS_PLAYERCLIP        0x10000
  352. #define    CONTENTS_MONSTERCLIP    0x20000
  353.  
  354. // currents can be added to any other contents, and may be mixed
  355. #define    CONTENTS_CURRENT_0        0x40000
  356. #define    CONTENTS_CURRENT_90        0x80000
  357. #define    CONTENTS_CURRENT_180    0x100000
  358. #define    CONTENTS_CURRENT_270    0x200000
  359. #define    CONTENTS_CURRENT_UP        0x400000
  360. #define    CONTENTS_CURRENT_DOWN    0x800000
  361.  
  362. #define    CONTENTS_ORIGIN            0x1000000    // removed before bsping an entity
  363.  
  364. #define    CONTENTS_MONSTER        0x2000000    // should never be on a brush, only in game
  365. #define    CONTENTS_DEADMONSTER    0x4000000
  366. #define    CONTENTS_DETAIL            0x8000000    // brushes to be added after vis leafs
  367. #define    CONTENTS_TRANSLUCENT    0x10000000    // auto set if any surface has trans
  368. #define    CONTENTS_LADDER            0x20000000
  369.  
  370.  
  371.  
  372. #define    SURF_LIGHT        0x1        // value will hold the light strength
  373.  
  374. #define    SURF_SLICK        0x2        // effects game physics
  375.  
  376. #define    SURF_SKY        0x4        // don't draw, but add to skybox
  377. #define    SURF_WARP        0x8        // turbulent water warp
  378. #define    SURF_TRANS33    0x10
  379. #define    SURF_TRANS66    0x20
  380. #define    SURF_FLOWING    0x40    // scroll towards angle
  381. #define    SURF_NODRAW        0x80    // don't bother referencing the texture
  382.  
  383.  
  384.  
  385. // content masks
  386. #define    MASK_ALL                (-1)
  387. #define    MASK_SOLID                (CONTENTS_SOLID|CONTENTS_WINDOW)
  388. #define    MASK_PLAYERSOLID        (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER)
  389. #define    MASK_DEADSOLID            (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW)
  390. #define    MASK_MONSTERSOLID        (CONTENTS_SOLID|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER)
  391. #define    MASK_WATER                (CONTENTS_WATER|CONTENTS_LAVA|CONTENTS_SLIME)
  392. #define    MASK_OPAQUE                (CONTENTS_SOLID|CONTENTS_SLIME|CONTENTS_LAVA)
  393. #define    MASK_SHOT                (CONTENTS_SOLID|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEADMONSTER)
  394. #define MASK_CURRENT            (CONTENTS_CURRENT_0|CONTENTS_CURRENT_90|CONTENTS_CURRENT_180|CONTENTS_CURRENT_270|CONTENTS_CURRENT_UP|CONTENTS_CURRENT_DOWN)
  395.  
  396.  
  397. // gi.BoxEdicts() can return a list of either solid or trigger entities
  398. // FIXME: eliminate AREA_ distinction?
  399. #define    AREA_SOLID        1
  400. #define    AREA_TRIGGERS    2
  401.  
  402.  
  403. // plane_t structure
  404. // !!! if this is changed, it must be changed in asm code too !!!
  405. typedef struct cplane_s
  406. {
  407.     vec3_t    normal;
  408.     float    dist;
  409.     byte    type;            // for fast side tests
  410.     byte    signbits;        // signx + (signy<<1) + (signz<<1)
  411.     byte    pad[2];
  412. } cplane_t;
  413.  
  414. // structure offset for asm code
  415. #define CPLANE_NORMAL_X            0
  416. #define CPLANE_NORMAL_Y            4
  417. #define CPLANE_NORMAL_Z            8
  418. #define CPLANE_DIST                12
  419. #define CPLANE_TYPE                16
  420. #define CPLANE_SIGNBITS            17
  421. #define CPLANE_PAD0                18
  422. #define CPLANE_PAD1                19
  423.  
  424. typedef struct cmodel_s
  425. {
  426.     vec3_t        mins, maxs;
  427.     vec3_t        origin;        // for sounds or lights
  428.     int            headnode;
  429. } cmodel_t;
  430.  
  431. typedef struct csurface_s
  432. {
  433.     char        name[16];
  434.     int            flags;
  435.     int            value;
  436. } csurface_t;
  437.  
  438. typedef struct mapsurface_s  // used internally due to name len probs //ZOID
  439. {
  440.     csurface_t    c;
  441.     char        rname[32];
  442. } mapsurface_t;
  443.  
  444. // a trace is returned when a box is swept through the world
  445. typedef struct
  446. {
  447.     qboolean    allsolid;    // if true, plane is not valid
  448.     qboolean    startsolid;    // if true, the initial point was in a solid area
  449.     float        fraction;    // time completed, 1.0 = didn't hit anything
  450.     vec3_t        endpos;        // final position
  451.     cplane_t    plane;        // surface normal at impact
  452.     csurface_t    *surface;    // surface hit
  453.     int            contents;    // contents on other side of surface hit
  454.     struct edict_s    *ent;        // not set by CM_*() functions
  455. } trace_t;
  456.  
  457.  
  458.  
  459. // pmove_state_t is the information necessary for client side movement
  460. // prediction
  461. typedef enum 
  462. {
  463.     // can accelerate and turn
  464.     PM_NORMAL,
  465.     PM_SPECTATOR,
  466.     // no acceleration or turning
  467.     PM_DEAD,
  468.     PM_GIB,        // different bounding box
  469.     PM_FREEZE
  470. } pmtype_t;
  471.  
  472. // pmove->pm_flags
  473. #define    PMF_DUCKED            1
  474. #define    PMF_JUMP_HELD        2
  475. #define    PMF_ON_GROUND        4
  476. #define    PMF_TIME_WATERJUMP    8    // pm_time is waterjump
  477. #define    PMF_TIME_LAND        16    // pm_time is time before rejump
  478. #define    PMF_TIME_TELEPORT    32    // pm_time is non-moving time
  479. #define PMF_NO_PREDICTION    64    // temporarily disables prediction (used for grappling hook)
  480.  
  481. // this structure needs to be communicated bit-accurate
  482. // from the server to the client to guarantee that
  483. // prediction stays in sync, so no floats are used.
  484. // if any part of the game code modifies this struct, it
  485. // will result in a prediction error of some degree.
  486. typedef struct
  487. {
  488.     pmtype_t    pm_type;
  489.  
  490.     short        origin[3];        // 12.3
  491.     short        velocity[3];    // 12.3
  492.     byte        pm_flags;        // ducked, jump_held, etc
  493.     byte        pm_time;        // each unit = 8 ms
  494.     short        gravity;
  495.     short        delta_angles[3];    // add to command angles to get view direction
  496.                                     // changed by spawns, rotating objects, and teleporters
  497. } pmove_state_t;
  498.  
  499.  
  500. //
  501. // button bits
  502. //
  503. #define    BUTTON_ATTACK        1
  504. #define    BUTTON_USE            2
  505. #define    BUTTON_ANY            128            // any key whatsoever
  506.  
  507.  
  508. // usercmd_t is sent to the server each client frame
  509. typedef struct usercmd_s
  510. {
  511.     byte    msec;
  512.     byte    buttons;
  513.     short    angles[3];
  514.     short    forwardmove, sidemove, upmove;
  515.     byte    impulse;        // remove?
  516.     byte    lightlevel;        // light level the player is standing on
  517. } usercmd_t;
  518.  
  519.  
  520. #define    MAXTOUCH    32
  521. typedef struct
  522. {
  523.     // state (in / out)
  524.     pmove_state_t    s;
  525.  
  526.     // command (in)
  527.     usercmd_t        cmd;
  528.     qboolean        snapinitial;    // if s has been changed outside pmove
  529.  
  530.     // results (out)
  531.     int            numtouch;
  532.     struct edict_s    *touchents[MAXTOUCH];
  533.  
  534.     vec3_t        viewangles;            // clamped
  535.     float        viewheight;
  536.  
  537.     vec3_t        mins, maxs;            // bounding box size
  538.  
  539.     struct edict_s    *groundentity;
  540.     int            watertype;
  541.     int            waterlevel;
  542.  
  543.     // callbacks to test the world
  544.     trace_t        (*trace) (vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end);
  545.     int            (*pointcontents) (vec3_t point);
  546. } pmove_t;
  547.  
  548.  
  549. // entity_state_t->effects
  550. // Effects are things handled on the client side (lights, particles, frame animations)
  551. // that happen constantly on the given entity.
  552. // An entity that has effects will be sent to the client
  553. // even if it has a zero index model.
  554. #define    EF_ROTATE            0x00000001        // rotate (bonus items)
  555. #define    EF_GIB                0x00000002        // leave a trail
  556. #define    EF_BLASTER            0x00000008        // redlight + trail
  557. #define    EF_ROCKET            0x00000010        // redlight + trail
  558. #define    EF_GRENADE            0x00000020
  559. #define    EF_HYPERBLASTER        0x00000040
  560. #define    EF_BFG                0x00000080
  561. #define EF_COLOR_SHELL        0x00000100
  562. #define EF_POWERSCREEN        0x00000200
  563. #define    EF_ANIM01            0x00000400        // automatically cycle between frames 0 and 1 at 2 hz
  564. #define    EF_ANIM23            0x00000800        // automatically cycle between frames 2 and 3 at 2 hz
  565. #define EF_ANIM_ALL            0x00001000        // automatically cycle through all frames at 2hz
  566. #define EF_ANIM_ALLFAST        0x00002000        // automatically cycle through all frames at 10hz
  567. #define    EF_FLIES            0x00004000
  568. #define    EF_QUAD                0x00008000
  569. #define    EF_PENT                0x00010000
  570. #define    EF_TELEPORTER        0x00020000        // particle fountain
  571. #define EF_FLAG1            0x00040000
  572. #define EF_FLAG2            0x00080000
  573. // RAFAEL
  574. #define EF_IONRIPPER        0x00100000
  575. #define EF_GREENGIB            0x00200000
  576. #define    EF_BLUEHYPERBLASTER 0x00400000
  577. #define EF_SPINNINGLIGHTS    0x00800000
  578. #define EF_PLASMA            0x01000000
  579. #define EF_SHIPEXHAUST        0x02000000
  580.  
  581. //ROGUE
  582. #define EF_TRACKER            0x04000000
  583. #define    EF_DOUBLE            0x08000000
  584. #define    EF_SPHERETRANS        0x10000000
  585. #define EF_TAGTRAIL            0x20000000
  586. #define EF_HALF_DAMAGE        0x40000000
  587. #define EF_TRACKERTRAIL        0x80000000
  588. //ROGUE
  589.  
  590. // entity_state_t->renderfx flags
  591. #define    RF_MINLIGHT            1        // allways have some light (viewmodel)
  592. #define    RF_VIEWERMODEL        2        // don't draw through eyes, only mirrors
  593. #define    RF_WEAPONMODEL        4        // only draw through eyes
  594. #define    RF_FULLBRIGHT        8        // allways draw full intensity
  595. #define    RF_DEPTHHACK        16        // for view weapon Z crunching
  596. #define    RF_TRANSLUCENT        32
  597. #define    RF_FRAMELERP        64
  598. #define RF_BEAM                128
  599. #define    RF_CUSTOMSKIN        256        // skin is an index in image_precache
  600. #define    RF_GLOW                512        // pulse lighting for bonus items
  601. #define RF_SHELL_RED        1024
  602. #define    RF_SHELL_GREEN        2048
  603. #define RF_SHELL_BLUE        4096
  604.  
  605. //ROGUE
  606. #define RF_IR_VISIBLE        0x00008000        // 32768
  607. #define    RF_SHELL_DOUBLE        0x00010000        // 65536
  608. #define    RF_SHELL_HALF_DAM    0x00020000
  609. #define RF_USE_DISGUISE        0x00040000
  610. //ROGUE
  611.  
  612. // player_state_t->refdef flags
  613. #define    RDF_UNDERWATER        1        // warp the screen as apropriate
  614. #define RDF_NOWORLDMODEL    2        // used for player configuration screen
  615.  
  616. //ROGUE
  617. #define    RDF_IRGOGGLES        4
  618. #define RDF_UVGOGGLES        8
  619. //ROGUE
  620.  
  621. //
  622. // muzzle flashes / player effects
  623. //
  624. #define    MZ_BLASTER            0
  625. #define MZ_MACHINEGUN        1
  626. #define    MZ_SHOTGUN            2
  627. #define    MZ_CHAINGUN1        3
  628. #define    MZ_CHAINGUN2        4
  629. #define    MZ_CHAINGUN3        5
  630. #define    MZ_RAILGUN            6
  631. #define    MZ_ROCKET            7
  632. #define    MZ_GRENADE            8
  633. #define    MZ_LOGIN            9
  634. #define    MZ_LOGOUT            10
  635. #define    MZ_RESPAWN            11
  636. #define    MZ_BFG                12
  637. #define    MZ_SSHOTGUN            13
  638. #define    MZ_HYPERBLASTER        14
  639. #define    MZ_ITEMRESPAWN        15
  640. // RAFAEL
  641. #define MZ_IONRIPPER        16
  642. #define MZ_BLUEHYPERBLASTER 17
  643. #define MZ_PHALANX            18
  644. #define MZ_SILENCED            128        // bit flag ORed with one of the above numbers
  645.  
  646. //ROGUE
  647. #define MZ_ETF_RIFLE        30
  648. #define MZ_UNUSED            31
  649. #define MZ_SHOTGUN2            32
  650. #define MZ_HEATBEAM            33
  651. #define MZ_BLASTER2            34
  652. #define    MZ_TRACKER            35
  653. #define    MZ_NUKE1            36
  654. #define    MZ_NUKE2            37
  655. #define    MZ_NUKE4            38
  656. #define    MZ_NUKE8            39
  657. //ROGUE
  658.  
  659. //
  660. // monster muzzle flashes
  661. //
  662. #define MZ2_TANK_BLASTER_1                1
  663. #define MZ2_TANK_BLASTER_2                2
  664. #define MZ2_TANK_BLASTER_3                3
  665. #define MZ2_TANK_MACHINEGUN_1            4
  666. #define MZ2_TANK_MACHINEGUN_2            5
  667. #define MZ2_TANK_MACHINEGUN_3            6
  668. #define MZ2_TANK_MACHINEGUN_4            7
  669. #define MZ2_TANK_MACHINEGUN_5            8
  670. #define MZ2_TANK_MACHINEGUN_6            9
  671. #define MZ2_TANK_MACHINEGUN_7            10
  672. #define MZ2_TANK_MACHINEGUN_8            11
  673. #define MZ2_TANK_MACHINEGUN_9            12
  674. #define MZ2_TANK_MACHINEGUN_10            13
  675. #define MZ2_TANK_MACHINEGUN_11            14
  676. #define MZ2_TANK_MACHINEGUN_12            15
  677. #define MZ2_TANK_MACHINEGUN_13            16
  678. #define MZ2_TANK_MACHINEGUN_14            17
  679. #define MZ2_TANK_MACHINEGUN_15            18
  680. #define MZ2_TANK_MACHINEGUN_16            19
  681. #define MZ2_TANK_MACHINEGUN_17            20
  682. #define MZ2_TANK_MACHINEGUN_18            21
  683. #define MZ2_TANK_MACHINEGUN_19            22
  684. #define MZ2_TANK_ROCKET_1                23
  685. #define MZ2_TANK_ROCKET_2                24
  686. #define MZ2_TANK_ROCKET_3                25
  687.  
  688. #define MZ2_INFANTRY_MACHINEGUN_1        26
  689. #define MZ2_INFANTRY_MACHINEGUN_2        27
  690. #define MZ2_INFANTRY_MACHINEGUN_3        28
  691. #define MZ2_INFANTRY_MACHINEGUN_4        29
  692. #define MZ2_INFANTRY_MACHINEGUN_5        30
  693. #define MZ2_INFANTRY_MACHINEGUN_6        31
  694. #define MZ2_INFANTRY_MACHINEGUN_7        32
  695. #define MZ2_INFANTRY_MACHINEGUN_8        33
  696. #define MZ2_INFANTRY_MACHINEGUN_9        34
  697. #define MZ2_INFANTRY_MACHINEGUN_10        35
  698. #define MZ2_INFANTRY_MACHINEGUN_11        36
  699. #define MZ2_INFANTRY_MACHINEGUN_12        37
  700. #define MZ2_INFANTRY_MACHINEGUN_13        38
  701.  
  702. #define MZ2_SOLDIER_BLASTER_1            39
  703. #define MZ2_SOLDIER_BLASTER_2            40
  704. #define MZ2_SOLDIER_SHOTGUN_1            41
  705. #define MZ2_SOLDIER_SHOTGUN_2            42
  706. #define MZ2_SOLDIER_MACHINEGUN_1        43
  707. #define MZ2_SOLDIER_MACHINEGUN_2        44
  708.  
  709. #define MZ2_GUNNER_MACHINEGUN_1            45
  710. #define MZ2_GUNNER_MACHINEGUN_2            46
  711. #define MZ2_GUNNER_MACHINEGUN_3            47
  712. #define MZ2_GUNNER_MACHINEGUN_4            48
  713. #define MZ2_GUNNER_MACHINEGUN_5            49
  714. #define MZ2_GUNNER_MACHINEGUN_6            50
  715. #define MZ2_GUNNER_MACHINEGUN_7            51
  716. #define MZ2_GUNNER_MACHINEGUN_8            52
  717. #define MZ2_GUNNER_GRENADE_1            53
  718. #define MZ2_GUNNER_GRENADE_2            54
  719. #define MZ2_GUNNER_GRENADE_3            55
  720. #define MZ2_GUNNER_GRENADE_4            56
  721.  
  722. #define MZ2_CHICK_ROCKET_1                57
  723.  
  724. #define MZ2_FLYER_BLASTER_1                58
  725. #define MZ2_FLYER_BLASTER_2                59
  726.  
  727. #define MZ2_MEDIC_BLASTER_1                60
  728.  
  729. #define MZ2_GLADIATOR_RAILGUN_1            61
  730.  
  731. #define MZ2_HOVER_BLASTER_1                62
  732.  
  733. #define MZ2_ACTOR_MACHINEGUN_1            63
  734.  
  735. #define MZ2_SUPERTANK_MACHINEGUN_1        64
  736. #define MZ2_SUPERTANK_MACHINEGUN_2        65
  737. #define MZ2_SUPERTANK_MACHINEGUN_3        66
  738. #define MZ2_SUPERTANK_MACHINEGUN_4        67
  739. #define MZ2_SUPERTANK_MACHINEGUN_5        68
  740. #define MZ2_SUPERTANK_MACHINEGUN_6        69
  741. #define MZ2_SUPERTANK_ROCKET_1            70
  742. #define MZ2_SUPERTANK_ROCKET_2            71
  743. #define MZ2_SUPERTANK_ROCKET_3            72
  744.  
  745. #define MZ2_BOSS2_MACHINEGUN_L1            73
  746. #define MZ2_BOSS2_MACHINEGUN_L2            74
  747. #define MZ2_BOSS2_MACHINEGUN_L3            75
  748. #define MZ2_BOSS2_MACHINEGUN_L4            76
  749. #define MZ2_BOSS2_MACHINEGUN_L5            77
  750. #define MZ2_BOSS2_ROCKET_1                78
  751. #define MZ2_BOSS2_ROCKET_2                79
  752. #define MZ2_BOSS2_ROCKET_3                80
  753. #define MZ2_BOSS2_ROCKET_4                81
  754.  
  755. #define MZ2_FLOAT_BLASTER_1                82
  756.  
  757. #define MZ2_SOLDIER_BLASTER_3            83
  758. #define MZ2_SOLDIER_SHOTGUN_3            84
  759. #define MZ2_SOLDIER_MACHINEGUN_3        85
  760. #define MZ2_SOLDIER_BLASTER_4            86
  761. #define MZ2_SOLDIER_SHOTGUN_4            87
  762. #define MZ2_SOLDIER_MACHINEGUN_4        88
  763. #define MZ2_SOLDIER_BLASTER_5            89
  764. #define MZ2_SOLDIER_SHOTGUN_5            90
  765. #define MZ2_SOLDIER_MACHINEGUN_5        91
  766. #define MZ2_SOLDIER_BLASTER_6            92
  767. #define MZ2_SOLDIER_SHOTGUN_6            93
  768. #define MZ2_SOLDIER_MACHINEGUN_6        94
  769. #define MZ2_SOLDIER_BLASTER_7            95
  770. #define MZ2_SOLDIER_SHOTGUN_7            96
  771. #define MZ2_SOLDIER_MACHINEGUN_7        97
  772. #define MZ2_SOLDIER_BLASTER_8            98
  773. #define MZ2_SOLDIER_SHOTGUN_8            99
  774. #define MZ2_SOLDIER_MACHINEGUN_8        100
  775.  
  776. // --- Xian shit below ---
  777. #define    MZ2_MAKRON_BFG                    101
  778. #define MZ2_MAKRON_BLASTER_1            102
  779. #define MZ2_MAKRON_BLASTER_2            103
  780. #define MZ2_MAKRON_BLASTER_3            104
  781. #define MZ2_MAKRON_BLASTER_4            105
  782. #define MZ2_MAKRON_BLASTER_5            106
  783. #define MZ2_MAKRON_BLASTER_6            107
  784. #define MZ2_MAKRON_BLASTER_7            108
  785. #define MZ2_MAKRON_BLASTER_8            109
  786. #define MZ2_MAKRON_BLASTER_9            110
  787. #define MZ2_MAKRON_BLASTER_10            111
  788. #define MZ2_MAKRON_BLASTER_11            112
  789. #define MZ2_MAKRON_BLASTER_12            113
  790. #define MZ2_MAKRON_BLASTER_13            114
  791. #define MZ2_MAKRON_BLASTER_14            115
  792. #define MZ2_MAKRON_BLASTER_15            116
  793. #define MZ2_MAKRON_BLASTER_16            117
  794. #define MZ2_MAKRON_BLASTER_17            118
  795. #define MZ2_MAKRON_RAILGUN_1            119
  796. #define    MZ2_JORG_MACHINEGUN_L1            120
  797. #define    MZ2_JORG_MACHINEGUN_L2            121
  798. #define    MZ2_JORG_MACHINEGUN_L3            122
  799. #define    MZ2_JORG_MACHINEGUN_L4            123
  800. #define    MZ2_JORG_MACHINEGUN_L5            124
  801. #define    MZ2_JORG_MACHINEGUN_L6            125
  802. #define    MZ2_JORG_MACHINEGUN_R1            126
  803. #define    MZ2_JORG_MACHINEGUN_R2            127
  804. #define    MZ2_JORG_MACHINEGUN_R3            128
  805. #define    MZ2_JORG_MACHINEGUN_R4            129
  806. #define MZ2_JORG_MACHINEGUN_R5            130
  807. #define    MZ2_JORG_MACHINEGUN_R6            131
  808. #define MZ2_JORG_BFG_1                    132
  809. #define MZ2_BOSS2_MACHINEGUN_R1            133
  810. #define MZ2_BOSS2_MACHINEGUN_R2            134
  811. #define MZ2_BOSS2_MACHINEGUN_R3            135
  812. #define MZ2_BOSS2_MACHINEGUN_R4            136
  813. #define MZ2_BOSS2_MACHINEGUN_R5            137
  814.  
  815. //ROGUE
  816. #define    MZ2_CARRIER_MACHINEGUN_L1        138
  817. #define    MZ2_CARRIER_MACHINEGUN_R1        139
  818. #define    MZ2_CARRIER_GRENADE                140
  819. #define MZ2_TURRET_MACHINEGUN            141
  820. #define MZ2_TURRET_ROCKET                142
  821. #define MZ2_TURRET_BLASTER                143
  822. #define MZ2_STALKER_BLASTER                144
  823. #define MZ2_DAEDALUS_BLASTER            145
  824. #define MZ2_MEDIC_BLASTER_2                146
  825. #define    MZ2_CARRIER_RAILGUN                147
  826. #define    MZ2_WIDOW_DISRUPTOR                148
  827. #define    MZ2_WIDOW_BLASTER                149
  828. #define    MZ2_WIDOW_RAIL                    150
  829. #define    MZ2_WIDOW_PLASMABEAM            151        // PMM - not used
  830. #define    MZ2_CARRIER_MACHINEGUN_L2        152
  831. #define    MZ2_CARRIER_MACHINEGUN_R2        153
  832. #define    MZ2_WIDOW_RAIL_LEFT                154
  833. #define    MZ2_WIDOW_RAIL_RIGHT            155
  834. #define    MZ2_WIDOW_BLASTER_SWEEP1        156
  835. #define    MZ2_WIDOW_BLASTER_SWEEP2        157
  836. #define    MZ2_WIDOW_BLASTER_SWEEP3        158
  837. #define    MZ2_WIDOW_BLASTER_SWEEP4        159
  838. #define    MZ2_WIDOW_BLASTER_SWEEP5        160
  839. #define    MZ2_WIDOW_BLASTER_SWEEP6        161
  840. #define    MZ2_WIDOW_BLASTER_SWEEP7        162
  841. #define    MZ2_WIDOW_BLASTER_SWEEP8        163
  842. #define    MZ2_WIDOW_BLASTER_SWEEP9        164
  843. #define    MZ2_WIDOW_BLASTER_100            165
  844. #define    MZ2_WIDOW_BLASTER_90            166
  845. #define    MZ2_WIDOW_BLASTER_80            167
  846. #define    MZ2_WIDOW_BLASTER_70            168
  847. #define    MZ2_WIDOW_BLASTER_60            169
  848. #define    MZ2_WIDOW_BLASTER_50            170
  849. #define    MZ2_WIDOW_BLASTER_40            171
  850. #define    MZ2_WIDOW_BLASTER_30            172
  851. #define    MZ2_WIDOW_BLASTER_20            173
  852. #define    MZ2_WIDOW_BLASTER_10            174
  853. #define    MZ2_WIDOW_BLASTER_0                175
  854. #define    MZ2_WIDOW_BLASTER_10L            176
  855. #define    MZ2_WIDOW_BLASTER_20L            177
  856. #define    MZ2_WIDOW_BLASTER_30L            178
  857. #define    MZ2_WIDOW_BLASTER_40L            179
  858. #define    MZ2_WIDOW_BLASTER_50L            180
  859. #define    MZ2_WIDOW_BLASTER_60L            181
  860. #define    MZ2_WIDOW_BLASTER_70L            182
  861. #define    MZ2_WIDOW_RUN_1                    183
  862. #define    MZ2_WIDOW_RUN_2                    184
  863. #define    MZ2_WIDOW_RUN_3                    185
  864. #define    MZ2_WIDOW_RUN_4                    186
  865. #define    MZ2_WIDOW_RUN_5                    187
  866. #define    MZ2_WIDOW_RUN_6                    188
  867. #define    MZ2_WIDOW_RUN_7                    189
  868. #define    MZ2_WIDOW_RUN_8                    190
  869. #define    MZ2_CARRIER_ROCKET_1            191
  870. #define    MZ2_CARRIER_ROCKET_2            192
  871. #define    MZ2_CARRIER_ROCKET_3            193
  872. #define    MZ2_CARRIER_ROCKET_4            194
  873. #define    MZ2_WIDOW2_BEAMER_1                195
  874. #define    MZ2_WIDOW2_BEAMER_2                196
  875. #define    MZ2_WIDOW2_BEAMER_3                197
  876. #define    MZ2_WIDOW2_BEAMER_4                198
  877. #define    MZ2_WIDOW2_BEAMER_5                199
  878. #define    MZ2_WIDOW2_BEAM_SWEEP_1            200
  879. #define    MZ2_WIDOW2_BEAM_SWEEP_2            201
  880. #define    MZ2_WIDOW2_BEAM_SWEEP_3            202
  881. #define    MZ2_WIDOW2_BEAM_SWEEP_4            203
  882. #define    MZ2_WIDOW2_BEAM_SWEEP_5            204
  883. #define    MZ2_WIDOW2_BEAM_SWEEP_6            205
  884. #define    MZ2_WIDOW2_BEAM_SWEEP_7            206
  885. #define    MZ2_WIDOW2_BEAM_SWEEP_8            207
  886. #define    MZ2_WIDOW2_BEAM_SWEEP_9            208
  887. #define    MZ2_WIDOW2_BEAM_SWEEP_10        209
  888. #define    MZ2_WIDOW2_BEAM_SWEEP_11        210
  889.  
  890. // ROGUE
  891.  
  892. extern    vec3_t monster_flash_offset [];
  893.  
  894.  
  895. // temp entity events
  896. //
  897. // Temp entity events are for things that happen
  898. // at a location seperate from any existing entity.
  899. // Temporary entity messages are explicitly constructed
  900. // and broadcast.
  901. typedef enum
  902. {
  903.     TE_GUNSHOT,
  904.     TE_BLOOD,
  905.     TE_BLASTER,
  906.     TE_RAILTRAIL,
  907.     TE_SHOTGUN,
  908.     TE_EXPLOSION1,
  909.     TE_EXPLOSION2,
  910.     TE_ROCKET_EXPLOSION,
  911.     TE_GRENADE_EXPLOSION,
  912.     TE_SPARKS,
  913.     TE_SPLASH,
  914.     TE_BUBBLETRAIL,
  915.     TE_SCREEN_SPARKS,
  916.     TE_SHIELD_SPARKS,
  917.     TE_BULLET_SPARKS,
  918.     TE_LASER_SPARKS,
  919.     TE_PARASITE_ATTACK,
  920.     TE_ROCKET_EXPLOSION_WATER,
  921.     TE_GRENADE_EXPLOSION_WATER,
  922.     TE_MEDIC_CABLE_ATTACK,
  923.     TE_BFG_EXPLOSION,
  924.     TE_BFG_BIGEXPLOSION,
  925.     TE_BOSSTPORT,            // used as '22' in a map, so DON'T RENUMBER!!!
  926.     TE_BFG_LASER,
  927.     TE_GRAPPLE_CABLE,
  928.     TE_WELDING_SPARKS,
  929.     TE_GREENBLOOD,
  930.     TE_BLUEHYPERBLASTER,
  931.     TE_PLASMA_EXPLOSION,
  932.     TE_TUNNEL_SPARKS,
  933. //ROGUE
  934.     TE_BLASTER2,
  935.     TE_RAILTRAIL2,
  936.     TE_FLAME,
  937.     TE_LIGHTNING,
  938.     TE_DEBUGTRAIL,
  939.     TE_PLAIN_EXPLOSION,
  940.     TE_FLASHLIGHT,
  941.     TE_FORCEWALL,
  942.     TE_HEATBEAM,
  943.     TE_MONSTER_HEATBEAM,
  944.     TE_STEAM,
  945.     TE_BUBBLETRAIL2,
  946.     TE_MOREBLOOD,
  947.     TE_HEATBEAM_SPARKS,
  948.     TE_HEATBEAM_STEAM,
  949.     TE_CHAINFIST_SMOKE,
  950.     TE_ELECTRIC_SPARKS,
  951.     TE_TRACKER_EXPLOSION,
  952.     TE_TELEPORT_EFFECT,
  953.     TE_DBALL_GOAL,
  954.     TE_WIDOWBEAMOUT,
  955.     TE_NUKEBLAST,
  956.     TE_WIDOWSPLASH,
  957.     TE_EXPLOSION1_BIG,
  958.     TE_EXPLOSION1_NP,
  959.     TE_FLECHETTE,
  960. //ROGUE
  961.  
  962. //CODERED
  963.     TE_LEADERBLASTER,
  964.     TE_BLASTER_MUZZLEFLASH,
  965.     TE_SMART_MUZZLEFLASH,
  966.     TE_LEADERFIELD,
  967.     TE_BLASTERBEAM,
  968.     TE_STAIN,
  969.     TE_FIRE,
  970.     TE_SMOKE
  971. //CODERED
  972. } temp_event_t;
  973.  
  974. #define SPLASH_UNKNOWN        0
  975. #define SPLASH_SPARKS        1
  976. #define SPLASH_BLUE_WATER    2
  977. #define SPLASH_BROWN_WATER    3
  978. #define SPLASH_SLIME        4
  979. #define    SPLASH_LAVA            5
  980. #define SPLASH_BLOOD        6
  981.  
  982.  
  983. // sound channels
  984. // channel 0 never willingly overrides
  985. // other channels (1-7) allways override a playing sound on that channel
  986. #define    CHAN_AUTO               0
  987. #define    CHAN_WEAPON             1
  988. #define    CHAN_VOICE              2
  989. #define    CHAN_ITEM               3
  990. #define    CHAN_BODY               4
  991. // modifier flags
  992. #define    CHAN_NO_PHS_ADD            8    // send to all clients, not just ones in PHS (ATTN 0 will also do this)
  993. #define    CHAN_RELIABLE            16    // send by reliable message, not datagram
  994.  
  995.  
  996. // sound attenuation values
  997. #define    ATTN_NONE               0    // full volume the entire level
  998. #define    ATTN_NORM               1
  999. #define    ATTN_IDLE               2
  1000. #define    ATTN_STATIC             3    // diminish very rapidly with distance
  1001.  
  1002.  
  1003. // player_state->stats[] indexes
  1004. #define STAT_HEALTH_ICON        0
  1005. #define    STAT_HEALTH                1
  1006. #define    STAT_AMMO_ICON            2
  1007. #define    STAT_AMMO                3
  1008. #define    STAT_ARMOR_ICON            4
  1009. #define    STAT_ARMOR                5
  1010. #define    STAT_SELECTED_ICON        6
  1011. #define    STAT_PICKUP_ICON        7
  1012. #define    STAT_PICKUP_STRING        8
  1013. #define    STAT_TIMER_ICON            9
  1014. #define    STAT_TIMER                10
  1015. #define    STAT_HELPICON            11
  1016. #define    STAT_SELECTED_ITEM        12
  1017. #define    STAT_LAYOUTS            13
  1018. #define    STAT_FRAGS                14
  1019. #define    STAT_FLASHES            15        // cleared each frame, 1 = health, 2 = armor
  1020. #define STAT_CHASE                16
  1021. #define STAT_SPECTATOR            17
  1022.  
  1023. #define    MAX_STATS                32
  1024.  
  1025.  
  1026. // dmflags->value flags
  1027. #define    DF_NO_HEALTH        0x00000001    // 1
  1028. #define    DF_NO_ITEMS            0x00000002    // 2
  1029. #define    DF_WEAPONS_STAY        0x00000004    // 4
  1030. #define    DF_NO_FALLING        0x00000008    // 8
  1031. #define    DF_INSTANT_ITEMS    0x00000010    // 16
  1032. #define    DF_SAME_LEVEL        0x00000020    // 32
  1033. #define DF_SKINTEAMS        0x00000040    // 64
  1034. #define DF_MODELTEAMS        0x00000080    // 128
  1035. #define DF_NO_FRIENDLY_FIRE    0x00000100    // 256
  1036. #define    DF_SPAWN_FARTHEST    0x00000200    // 512
  1037. #define DF_FORCE_RESPAWN    0x00000400    // 1024
  1038. #define DF_NO_ARMOR            0x00000800    // 2048
  1039. #define DF_ALLOW_EXIT        0x00001000    // 4096
  1040. #define DF_INFINITE_AMMO    0x00002000    // 8192
  1041. #define DF_QUAD_DROP        0x00004000    // 16384
  1042. #define DF_FIXED_FOV        0x00008000    // 32768
  1043.  
  1044. // RAFAEL
  1045. #define    DF_QUADFIRE_DROP    0x00010000    // 65536
  1046.  
  1047. //ROGUE
  1048. #define DF_NO_MINES            0x00020000
  1049. #define DF_NO_STACK_DOUBLE    0x00040000
  1050. #define DF_NO_NUKES            0x00080000
  1051. #define DF_NO_SPHERES        0x00100000
  1052. //ROGUE
  1053.  
  1054. /*
  1055. ROGUE - VERSIONS
  1056. 1234    08/13/1998        Activision
  1057. 1235    08/14/1998        Id Software
  1058. 1236    08/15/1998        Steve Tietze
  1059. 1237    08/15/1998        Phil Dobranski
  1060. 1238    08/15/1998        John Sheley
  1061. 1239    08/17/1998        Barrett Alexander
  1062. 1230    08/17/1998        Brandon Fish
  1063. 1245    08/17/1998        Don MacAskill
  1064. 1246    08/17/1998        David "Zoid" Kirsch
  1065. 1247    08/17/1998        Manu Smith
  1066. 1248    08/17/1998        Geoff Scully
  1067. 1249    08/17/1998        Andy Van Fossen
  1068. 1240    08/20/1998        Activision Build 2
  1069. 1256    08/20/1998        Ranger Clan
  1070. 1257    08/20/1998        Ensemble Studios
  1071. 1258    08/21/1998        Robert Duffy
  1072. 1259    08/21/1998        Stephen Seachord
  1073. 1250    08/21/1998        Stephen Heaslip
  1074. 1267    08/21/1998        Samir Sandesara
  1075. 1268    08/21/1998        Oliver Wyman
  1076. 1269    08/21/1998        Steven Marchegiano
  1077. 1260    08/21/1998        Build #2 for Nihilistic
  1078. 1278    08/21/1998        Build #2 for Ensemble
  1079.  
  1080. 9999    08/20/1998        Internal Use
  1081. */
  1082. #define ROGUE_VERSION_ID        1278
  1083.  
  1084. #define ROGUE_VERSION_STRING    "08/21/1998 Beta 2 for Ensemble"
  1085.  
  1086. // ROGUE
  1087. /*
  1088. ==========================================================
  1089.  
  1090.   ELEMENTS COMMUNICATED ACROSS THE NET
  1091.  
  1092. ==========================================================
  1093. */
  1094.  
  1095. #define    ANGLE2SHORT(x)    ((int)((x)*65536/360) & 65535)
  1096. #define    SHORT2ANGLE(x)    ((x)*(360.0/65536))
  1097.  
  1098.  
  1099. //
  1100. // config strings are a general means of communication from
  1101. // the server to all connected clients.
  1102. // Each config string can be at most MAX_QPATH characters.
  1103. //
  1104. #define    CS_NAME                0
  1105. #define    CS_CDTRACK            1
  1106. #define    CS_SKY                2
  1107. #define    CS_SKYAXIS            3        // %f %f %f format
  1108. #define    CS_SKYROTATE        4
  1109. #define    CS_STATUSBAR        5        // display program string
  1110.  
  1111. #define CS_AIRACCEL            29        // air acceleration control
  1112. #define    CS_MAXCLIENTS        30
  1113. #define    CS_MAPCHECKSUM        31        // for catching cheater maps
  1114.  
  1115. #define    CS_MODELS            32
  1116. #define    CS_SOUNDS            (CS_MODELS+MAX_MODELS)
  1117. #define    CS_IMAGES            (CS_SOUNDS+MAX_SOUNDS)
  1118. #define    CS_LIGHTS            (CS_IMAGES+MAX_IMAGES)
  1119. #define    CS_ITEMS            (CS_LIGHTS+MAX_LIGHTSTYLES)
  1120. #define    CS_PLAYERSKINS        (CS_ITEMS+MAX_ITEMS)
  1121. #define CS_GENERAL            (CS_PLAYERSKINS+MAX_CLIENTS)
  1122. #define    MAX_CONFIGSTRINGS    (CS_GENERAL+MAX_GENERAL)
  1123.  
  1124.  
  1125. //==============================================
  1126.  
  1127.  
  1128. // entity_state_t->event values
  1129. // ertity events are for effects that take place reletive
  1130. // to an existing entities origin.  Very network efficient.
  1131. // All muzzle flashes really should be converted to events...
  1132. typedef enum
  1133. {
  1134.     EV_NONE,
  1135.     EV_ITEM_RESPAWN,
  1136.     EV_FOOTSTEP,
  1137.     EV_FALLSHORT,
  1138.     EV_FALL,
  1139.     EV_FALLFAR,
  1140.     EV_PLAYER_TELEPORT,
  1141.     EV_OTHER_TELEPORT
  1142. } entity_event_t;
  1143.  
  1144.  
  1145. // entity_state_t is the information conveyed from the server
  1146. // in an update message about entities that the client will
  1147. // need to render in some way
  1148. typedef struct entity_state_s
  1149. {
  1150.     int        number;            // edict index
  1151.  
  1152.     vec3_t    origin;
  1153.     vec3_t    angles;
  1154.     vec3_t    old_origin;        // for lerping
  1155.     int        modelindex;
  1156.     int        modelindex2, modelindex3, modelindex4;    // weapons, CTF flags, etc
  1157.     int        frame;
  1158.     int        skinnum;
  1159.     unsigned int        effects;        // PGM - we're filling it, so it needs to be unsigned
  1160.     int        renderfx;
  1161.     int        solid;            // for client side prediction, 8*(bits 0-4) is x/y radius
  1162.                             // 8*(bits 5-9) is z down distance, 8(bits10-15) is z up
  1163.                             // gi.linkentity sets this properly
  1164.     int        sound;            // for looping sounds, to guarantee shutoff
  1165.     int        event;            // impulse events -- muzzle flashes, footsteps, etc
  1166.                             // events only go out for a single frame, they
  1167.                             // are automatically cleared each frame
  1168. } entity_state_t;
  1169.  
  1170. //==============================================
  1171.  
  1172.  
  1173. // player_state_t is the information needed in addition to pmove_state_t
  1174. // to rendered a view.  There will only be 10 player_state_t sent each second,
  1175. // but the number of pmove_state_t changes will be reletive to client
  1176. // frame rates
  1177. typedef struct
  1178. {
  1179.     pmove_state_t    pmove;        // for prediction
  1180.  
  1181.     // these fields do not need to be communicated bit-precise
  1182.  
  1183.     vec3_t        viewangles;        // for fixed views
  1184.     vec3_t        viewoffset;        // add to pmovestate->origin
  1185.     vec3_t        kick_angles;    // add to view direction to get render angles
  1186.                                 // set by weapon kicks, pain effects, etc
  1187.  
  1188.     vec3_t        gunangles;
  1189.     vec3_t        gunoffset;
  1190.     int            gunindex;
  1191.     int            gunframe;
  1192.  
  1193.     float        blend[4];        // rgba full screen effect
  1194.     
  1195.     float        fov;            // horizontal field of view
  1196.  
  1197.     int            rdflags;        // refdef flags
  1198.  
  1199.     short        stats[MAX_STATS];        // fast status bar updates
  1200. } player_state_t;
  1201.